#include <iostream>
#include <string>
#include <thread>
#include <unistd.h>
int a = 0;
class pt {
public:
    void operator()() const
    {
	++a;
	std::cout << "hi" << std::endl;
    }
};

void func(std::string pt)
{
    std::cout << pt.data() << std::endl;
}

class A {
private:
    std::thread ks;

public:
    //两次右值引用
    explicit A(std::thread t1)
	: ks(std::move(t1))
    {
    }
    ~A() { ks.join(); }
};

int main(int argc, char* argv[])
{
    //thread的构造函数是一个函数模板
    std::string a = "123123";
    std::thread t(func, a);
    //看到了，一定要传递一个右值进去才可以,剥离将亡值thread线程控制。
    A j(std::thread(func, a));
    //如果没有join，那么主进程就会在线程结束前结束，而后线程对
    //地址空间的访问全部是非法的（进程地址空间已经销毁了）。
    t.join();
    //硬件线程数
    std::cout<<std::thread::hardware_concurrency()<<std::endl;
    return 0;
}
